package fr.nts.framework.front.security.service.model;

import java.util.Collection;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;

/**
 * La classe définissant un utilisateur NTS au sens spring security. 
 * C'est cet objet qui sera utilisé coté client pour représenter un utilisateur correctement authentifié.
 * On dérive de la classe par défaut de Spring security pour rajouter les propriétés suivantes:
 * 
 * <lu>
 *      <li>name</li>
 *      <li>firstname</li>
 * </lu>

 * @author sco
 * @version 1.0.0
 */
public class SimpleUserDetails extends User{

    private static final long serialVersionUID = 1L;
    
    private final static String PROTECTED_VAR = "[PROTECTED]";
    
    /**
     * Le nom de l'utilisateur
     */
    private String name;

    /**
     * Le prénom de l'utilisateur
     */
    private String firstname;
    
    /**
     * Représente un utilisateur NTS correctement authentifié pour la sécurité d'une application.
     * 
     * @param username Le login de l'utilisateur.
     * @param enabled Compte activé ou non.
     * @param authorities La liste des rôles.
     * @throws IllegalArgumentException Mauvais paramètrage.
     */
    public SimpleUserDetails(String username, 
	                         boolean enabled,
	                         Collection<GrantedAuthority> authorities) throws IllegalArgumentException{
        super(username, 
              PROTECTED_VAR, 
              enabled, 
              true, 
              true,
              true, 
              authorities);
    }

    
    /*
     * (non-Javadoc)
     * @see org.springframework.security.core.userdetails.User#toString()
     */
    @Override
    public String toString(){
        return new ToStringBuilder(this).appendSuper(super.toString())
        		                        .append("username", 
                                                getUsername())
                                        .append("enabled", 
                                                isEnabled())    
                                        .append("name", 
                                                name)
                                        .append("firstname", 
                                                firstname).toString();
        
    }
    
    
    // GETTER/SETTER
    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }

    public String getFirstname(){
        return firstname;
    }

    public void setFirstname(String firstname){
        this.firstname = firstname;
    }
}